home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm3.lha / SORGENTI7 / Lezione11l3a.s / Lezione11l3a.s
Text File  |  1995-10-23  |  9KB  |  330 lines

  1.  
  2. ;  Lezione11l3a.s - spostiamo una pic in alto/basso - destra/sinitra
  3.  
  4.     SECTION    coplanes,CODE
  5.  
  6. ;    Include    "DaWorkBench.s"    ; togliere il ; prima di salvare con "WO"
  7.  
  8. *****************************************************************************
  9.     include    "startup2.s" ; Salva Copperlist Etc.
  10. *****************************************************************************
  11.  
  12.         ;5432109876543210
  13. DMASET    EQU    %1000001110000000    ; solo copper e bitplane DMA
  14.  
  15. WaitDisk    EQU    30    ; 50-150 al salvataggio (secondo i casi)
  16.  
  17. scr_bytes    = 40    ; Numero di bytes per ogni linea orizzontale.
  18.             ; Da questa si calcola la larghezza dello schermo,
  19.             ; moltiplicando i bytes per 8: schermo norm. 320/8=40
  20.             ; Es. per uno schermo largo 336 pixel, 336/8=42
  21.             ; larghezze esempio:
  22.             ; 264 pixel = 33 / 272 pixel = 34 / 280 pixel = 35
  23.             ; 360 pixel = 45 / 368 pixel = 46 / 376 pixel = 47
  24.             ; ... 640 pixel = 80 / 648 pixel = 81 ...
  25.  
  26. scr_h        = 256    ; Altezza dello schermo in linee
  27. scr_x        = $81    ; Inizio schermo, posizione XX (normale $xx81) (129)
  28. scr_y        = $2c    ; Inizio schermo, posizione YY (normale $2cxx) (44)
  29. scr_res        = 1    ; 2 = HighRes (640*xxx) / 1 = LowRes (320*xxx)
  30. scr_lace    = 0    ; 0 = non interlace (xxx*256) / 1 = interlace (xxx*512)
  31. ham        = 1    ; 0 = non ham / 1 = ham
  32. scr_bpl        = 6    ; Numero Bitplanes
  33.  
  34. ; parametri calcolati automaticamente
  35.  
  36. scr_w        = scr_bytes*8        ; larghezza dello schermo
  37. scr_size    = scr_bytes*scr_h    ; dimensione in bytes dello schermo
  38. BPLC0    = ((scr_res&2)<<14)+(scr_bpl<<12)+$200+(scr_lace<<2)+(ham<<11)
  39. DIWS    = (scr_y<<8)+scr_x
  40. DIWSt    = ((scr_y+scr_h/(scr_lace+1))&255)<<8+(scr_x+scr_w/scr_res)&255
  41. DDFS    = (scr_x-(16/scr_res+1))/2
  42. DDFSt    = DDFS+(8/scr_res)*(scr_bytes/2-scr_res)
  43.  
  44.  
  45. START:
  46.  
  47. ; Puntiamo la PIC
  48.  
  49.     LEA    bplpointers,A0
  50.     MOVE.L    #LOGO+40*40,d0    ; indirizzo logo (un po' ribassato)
  51.     MOVEQ    #6-1,D7        ; 6 bitplanes HAM.
  52. pointloop:
  53.     MOVE.W    D0,6(A0)
  54.     SWAP    D0
  55.     MOVE.W    D0,2(A0)
  56.     SWAP    D0
  57.     ADDQ.w    #8,A0
  58.     ADD.L    #176*40,D0    ; lunghezza plane
  59.     DBRA    D7,pointloop
  60.  
  61.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  62.                     ; e sprites.
  63.     move.l    #COPPERLIST,$80(a5)    ; Puntiamo la nostra COP
  64.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  65.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  66.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  67.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  68.  
  69. mouse:
  70.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  71.     MOVE.L    #$13000,d2    ; linea da aspettare = $130, ossia 304
  72. Waity1:
  73.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  74.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  75.     CMPI.L    D2,D0        ; aspetta la linea $130 (304)
  76.     BNE.S    Waity1
  77.  
  78.     bsr.w    sugiu        ; sposta in basso e in alto
  79.     bsr.w    lefrig        ; sposta a destra e a sinistra
  80.  
  81.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  82.     MOVE.L    #$13000,d2    ; linea da aspettare = $130, ossia 304
  83. Aspetta:
  84.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  85.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  86.     CMPI.L    D2,D0        ; aspetta la linea $130 (304)
  87.     BEQ.S    Aspetta
  88.  
  89.     btst    #6,$bfe001    ; Mouse premuto?
  90.     bne.s    mouse
  91.     rts            ; esci
  92.  
  93.  
  94. *****************************************************************************
  95. ;    ROUTINE DEL LOGO SU GIU (fa puntare piu' in avanti o piu' indietro
  96. ;                 i bplpointers, niente di eccezionale
  97. *****************************************************************************
  98.  
  99. ;      _________________
  100. ;      \               /
  101. ;       \_____________/_
  102. ;        | \___________/
  103. ;        |__  ..  _:
  104. ;        | \_____/ :
  105. ;      __`---------'__
  106. ;    ./               \.
  107. ;    |  _           _  |
  108. ;    |  |           |  |
  109.  
  110. SuGiuFlag:
  111.     DC.W    0
  112.  
  113. SUGIU:
  114.     LEA    BPLPOINTERS,A1    ; prendi l'indirizzo attualmente puntato nei
  115.     move.w    2(a1),d0    ; bitplanes e mettilo in d0
  116.     swap    d0
  117.     move.w    6(a1),d0
  118.  
  119.     BTST.b    #1,SuGiuFlag        ; devo andare su o giu?
  120.     BEQ.S    GIUT
  121.  
  122. ; VADO SU
  123.  
  124. SUT:
  125.     MOVE.L    SUGIUTABP(PC),A0 ; tabella con multipli di 40 (del modulo)
  126.     SUBQ.L    #2,SUGIUTABP     ; prendo il valore "prima"
  127.     CMPA.L    #SUGIUTAB+4,A0
  128.     BNE.S    NOBSTART
  129.     BCHG.B    #1,SuGiuFlag        ; se ho finito, cambia direzione (vai in basso)
  130.     ADDQ.L    #2,SUGIUTABP    ; per bilanciare
  131. NOBSTART:
  132.     BRA.s    NOBEND
  133.  
  134. ; VADO GIU
  135.  
  136. GIUT:
  137.     MOVE.L    SUGIUTABP(PC),A0 ; tabella con multipli di 40
  138.     ADDQ.L    #2,SUGIUTABP     ; prendo il valore "dopo"
  139.     CMPA.L    #SUGIUTABEND-4,A0
  140.     BNE.S    NOBEND
  141.     BCHG.B    #1,SuGiuFlag        ; se ho finito, cambia direzione
  142. NOBEND:
  143.     moveq    #0,d1
  144.     MOVE.w    (A0),D1        ; valore da tabella in d1
  145.     BTST.b    #1,SuGiuFlag
  146.     BEQ.S    GIU
  147. SU:
  148.     add.l    d1,d0        ; se vado SU lo aggiungo
  149.     BRA.S    MOVLOG
  150. GIU:
  151.     sub.l    d1,d0        ; se vado GIU lo sottraggo
  152. MOVLOG:
  153.     LEA    BPLPOINTERS,A1    ; e ripunto al nuovo indirizzo
  154.     MOVEQ    #6-1,D1        ; num di bitplanes -1 (ham 6 bitplanes)
  155. APOINTB:
  156.     move.w    d0,6(a1)
  157.     swap    d0
  158.     move.w    d0,2(a1)
  159.     swap    d0
  160.     add.l    #176*40,d0    ; lunghrzza di un bitplane
  161.     addq.w    #8,a1
  162.     dbra    d1,APOINTB        ;Rifai D1 volte (D1=num of bitplanes)
  163. NOMOVE:
  164.     rts
  165.  
  166. SUGIUTABP:
  167.     dc.l    SuGiuTab
  168.  
  169. ; tabella col numero di bytes da saltare... naturalmente sono multipli di 40,
  170. ; ossia della lunghezza di una linea.
  171.  
  172. SuGiuTab:
  173.     dc.w    0*40,0*40,0*40,1*40,0*40,0*40,1*40,0*40,1*40
  174.     dc.w    0*40,0*40,1*40,0*40,1*40,0*40,1*40,1*40,0*40
  175.     dc.w    0*40,0*40,1*40,0*40,1*40,0*40,1*40,0*40,0*40
  176.     dc.w    0*40,1*40,1*40,0*40,1*40,0*40,1*40,1*40,1*40
  177.     dc.w    1*40,0*40,1*40,1*40,1*40,1*40,0*40
  178.     dc.w    1*40,0*40,1*40,0*40,1*40,0*40,0*40,1*40,0*40
  179.     dc.w    0*40,1*40,0*40,1*40,0*40,0*40,1*40,0*40,0*40
  180. SuGiuTabEnd:
  181.  
  182. *****************************************************************************
  183. ;    ROUTINE DEL LOGO DEST SINIST (usa il bplcon1, niente di speciale)
  184. *****************************************************************************
  185.  
  186. ;        ____
  187. ;    ____/____\_____
  188. ;    _)_  _  ______/
  189. ;    \_(·)(·)(¥__\%
  190. ;     \(___ ¯    //
  191. ;      \V V\_____/ st!
  192. ;       ¯¯¯¯¯¯¯¯
  193.  
  194. DestSinFlag:
  195.     DC.W    0
  196.  
  197. LefRig:
  198.     BTST.b    #1,DestSinFlag    ; devo andare a destra o a sinistra?
  199.     BEQ.S    ScrolDestra
  200. ScrolSinitra:
  201.     MOVE.L    LefRigTABP(PC),A0    ; tabella con valori per bplcon1
  202.     SUBQ.L    #2,LefRigTABP        ; vado a sinistra
  203.     CMPA.L    #LefRigTAB+4,A0        ; fine tabella?
  204.     BNE.S    NOBSTART2        ; se non ancora, continua
  205.     BCHG.B    #1,DestSinFlag        ; Altrimenti, cambia direzione
  206.     ADDQ.L    #2,LefRigTABP        ; per bilanciare
  207. NOBSTART2:
  208.     BRA.s    NOBEND2
  209.  
  210. ScrolDestra:
  211.     MOVE.L    LefRigTABP(PC),A0    ; tabella valori per bplcon1
  212.     ADDQ.L    #2,LefRigTABP        ; vado a destra
  213.     CMPA.L    #LefRigEND-4,A0        ; fine tabella?
  214.     BNE.S    NOBEND2            ; Se non ancora, continua
  215.     BCHG.B    #1,DestSinFlag        ; Altrimenti cambia direzione
  216. NOBEND2:
  217.     MOVE.w    (A0),CON1        ; metti il valore nel bplcon1 nella
  218. NOMOVE2:                ; Copperlist
  219.     rts
  220.  
  221. LefRigTABP:
  222.     dc.l    LefRigTab
  223.  
  224. ; Questi sono valori adatti al bplcon1 ($dff102) per scrollare a destra/sin.
  225.  
  226. LefRigTab:
  227.     dc.w    0,0,0,0,0,0,0,$11,$11,$11,$11,$11
  228.     dc.w    $22,$22,$22,$22,$22
  229.     dc.w    $33,$33,$33
  230.     dc.w    $44,$44
  231.     dc.w    $55,$55,$55
  232.     dc.w    $66,$66,$66,$66,$66
  233.     dc.w    $77,$77,$77,$77,$77,$77,$77
  234.     dc.w    $88,$88,$88,$88,$88,$88,$88,$88
  235.     dc.w    $99,$99,$99,$99,$99,$99
  236.     dc.w    $aa,$aa,$aa,$aa,$aa
  237.     dc.w    $bb,$bb,$bb,$bb
  238.     dc.w    $cc,$cc,$cc,$cc
  239.     dc.w    $dd,$dd,$dd,$dd,$dd
  240.     dc.w    $ee,$ee,$ee,$ee,$ee,$ee
  241.     dc.w    $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
  242. LefRigEnd:
  243.  
  244.  
  245. ******************************************************************************
  246. ;        COPPERLIST:
  247. ******************************************************************************
  248.  
  249.     Section    MioCoppero,data_C    
  250.  
  251. COPPERLIST:
  252.     dc.w    $8e,DIWS    ; DiwStrt
  253.     dc.w    $90,DIWSt    ; DiwStop
  254.     dc.w    $92,DDFS    ; DdfStart
  255.     dc.w    $94,DDFSt    ; DdfStop
  256.  
  257.     dc.w    $102,0        ; BplCon1
  258.     dc.w    $104,0        ; BplCon2
  259.     dc.w    $108,0        ; Bpl1Mod
  260.     dc.w    $10a,0        ; Bpl2Mod
  261.  
  262. BPLPOINTERS:
  263.     dc.w $e0,0,$e2,0        ;primo      bitplane
  264.     dc.w $e4,0,$e6,0        ;secondo    "
  265.     dc.w $e8,0,$ea,0        ;terzo      "
  266.     dc.w $ec,0,$ee,0        ;quarto     "
  267.     dc.w $f0,0,$f2,0        ;quinto     "
  268.     dc.w $f4,0,$f6,0        ;sesto      "
  269.  
  270.     dc.w    $180,0    ; Color0 nero
  271.  
  272.  
  273.     dc.w    $100,BPLC0    ; BplCon0 - 320*256 HAM
  274.  
  275.  
  276.     dc.w $180,$0000,$182,$134,$184,$531,$186,$443
  277.     dc.w $188,$0455,$18a,$664,$18c,$466,$18e,$973
  278.     dc.w $190,$0677,$192,$886,$194,$898,$196,$a96
  279.     dc.w $198,$0ca6,$19a,$9a9,$19c,$bb9,$19e,$dc9
  280.     dc.w $1a0,$0666
  281.  
  282.     dc.w    $102    ; bplcon1
  283. CON1:
  284.     dc.w    0
  285.  
  286.     dc.w    $9707,$FFFE    ; wait linea $97
  287.     dc.w    $100,$200    ; no bitplanes
  288.     dc.w    $180,$110    ; color0
  289.     dc.w    $9807,$FFFE    ; wait
  290.     dc.w    $180,$120    ; color0
  291.     dc.w    $9a07,$FFFE
  292.     dc.w    $180,$130
  293.     dc.w    $9b07,$FFFE
  294.     dc.w    $180,$240
  295.     dc.w    $9c07,$FFFE
  296.     dc.w    $180,$250
  297.     dc.w    $9d07,$FFFE
  298.     dc.w    $180,$370
  299.     dc.w    $9e07,$FFFE
  300.     dc.w    $180,$390
  301.     dc.w    $9f07,$FFFE
  302.     dc.w    $180,$4b0
  303.     dc.w    $a007,$FFFE
  304.     dc.w    $180,$5d0
  305.     dc.w    $a107,$FFFE
  306.     dc.w    $180,$4a0
  307.     dc.w    $a207,$FFFE
  308.     dc.w    $180,$380
  309.     dc.w    $a307,$FFFE
  310.     dc.w    $180,$360
  311.     dc.w    $a407,$FFFE
  312.     dc.w    $180,$240
  313.     dc.w    $a507,$FFFE
  314.     dc.w    $180,$120
  315.     dc.w    $a607,$FFFE
  316.     dc.w    $180,$110
  317.     DC.W    $A70F,$FFFE
  318.     DC.W    $180,$000
  319.  
  320.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  321.  
  322.  
  323.     SECTION    LOGO,CODE_C
  324.  
  325. LOGO:
  326.     incbin    "amiet.raw"    ; 6 bitplanes * 176 lines * 40 bytes (HAM)
  327.  
  328.     END
  329.  
  330.